import re
#使用多线程下载整本小说

import requests
import parsel
#导入文件操作模块
import os

def get_reponse(html_url):
    """
    定义发送请求的函数
    :param html_url:  请求链接
    :return: reponse相应对象
    """
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
    }
    reponses = requests.get(url=html_url,headers=headers)
    return reponses

def get_list_url(html_url):
    """
    获取章节url/小说名
    :param html_url:
    :return:
    """
    #调用发送请求函数
    html_data = get_reponse(html_url).text
    #提取小说名字
    name = re.findall('<h1>(.*?)</h1>',html_data)[0]
    #提取章节url
    url_list = re.findall('<dd> <a style="" href="(.*?)">',html_data)
    return name,url_list


def get_content(html_url):
    """
    获取小说内容/小说标题
    :param html_url: 小说章节url
    :return:
    """
    #调用发送请求的函数
    html_data = get_reponse(html_url).text
    #提取数据
    select = parsel.Selector(html_data)
    title = select.css('.bookname h1::text').get()
    #提取内容
    content1 = select.css('#content::text').getall()
    contents_result = '\n'.join(content1)
    return title,contents_result

def save(name,title,content):
    """
    保存数据函数
    :param name: 小说名
    :param title: 章节名
    :param content: 内容
    :return:
    """
    #自动创建一个文件夹
    file = f'{name}\\'
    if not os.path.exists(file):
        os.mkdir(file)
    #title <文件名> '.txt'文件格式  a表示追加保存  encoding编码格式  as表示重命名
    with open(file + name + '.txt', mode='a',encoding='utf-8') as f:
        """
        第一章
           小说内容
        第二章
           小说内容
        """
        f.write(title)
        f.write('\n')
        f.write(content)
        f.write('\n')
    print(title,'已保存')


def main(home_url):
    #获取name和章节链接
   name,url_list = get_list_url(home_url)
   for url in url_list:
       index_url = 'http://www.1biqug.net' + url
       title,content=get_content(html_url=index_url)
       save(name,title,content)

if __name__ == '__main__':
    url = 'http://www.1biqug.net/book/1376/'
    main(home_url=url)






# list_url = 'http://www.1biqug.net/book/1376/'
#
# headers={
#     'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
# }
#
# html_data = requests.get(list_url)
#
# #提取章节
# #方式1：使用正则
# url_list = re.findall('<dd><a style="color:Gray;" href="(.*?)">',html_data.text)
# #提取小说名字
# name = re.findall('<h1>(.*?)</h1>',html_data.text)[0]
# #自动创建一个文件夹
# file = f'{name}\\'
# if not os.path.exists(file):
#     os.mkdir(file)
#
#
# #for循环便利
# for item in url_list:
#     urlTmp = 'http://www.1biqug.net' + item
#     reponses = requests.get(urlTmp)
#     select = parsel.Selector(reponses.text)
#     title = select.css('.bookname h1::text').get()
#
#     contents = select.css('#content::text').getall()
#
#     select.xpath('//*[@class="bookname"]/h1/text()').get()
#
#     select.xpath('//*[id="content"]/text()').getall()
#
#     contents_result = '\n'.join(contents)
#     print(contents_result)
#
#     #title <文件名> '.txt'文件格式  a表示追加保存  encoding编码格式  as表示重命名
#     with open(file + name + '.txt', mode='a',encoding='utf-8') as f:
#         """
#         第一章
#            小说内容
#         第二章
#            小说内容
#         """
#         f.write(title)
#         f.write('\n')
#         f.write(contents_result)
#         f.write('\n')
